"""
爬取汽车之家二手车每一辆车的详细信息
 # 第一步需要爬取一级页面 中二级页面的超链接
      1. 观察url地址特点
      https://www.che168.com/zhangjiakou/a0_0msdgscncgpi1ltocsp{1}exx0/
      https://www.che168.com/zhangjiakou/a0_0msdgscncgpi1ltocsp{2}exx0/
      https://www.che168.com/zhangjiakou/a0_0msdgscncgpi1ltocsp{3}exx0/
      2.获取页面
      3. 分析页面
         根据正则表达式 需要写出正则表达式
 # 第二步爬取二级页面 中 具体的汽车信息
     1. 获取页面
     2. 分析页面
        车的标题 里程数、上牌时间、档位/排量  车辆所在地  价格
        需要写出正则表达式
    3. 保存信息
# 第三步： 部署代码结构
"""
import random
import re
import time

import requests
from pymysql import Connection

class CarSpider:
    def __init__(self):
        self.url = 'https://www.che168.com/zhangjiakou/a0_0msdgscncgpi1ltocsp{}exx0/'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36',
        }

    def get_html(self,url):
        """获取html"""
        try:
            html = requests.get(url=url, headers=self.headers, timeout=3).text
            # time.sleep(random.randint(1,3))
            return html
        except Exception as e:
            print("连接超时：",url)

    def re_func(self,regex,html):
        """功能函数1：解析正则表达式"""
        pattern = re.compile(regex,re.S)
        r_list = pattern.findall(html)
        return r_list

    def parse_html(self,one_url):
        """功能函数2：解析页面"""
        # 1. 解析一级页面 通过一级页面获取 二级页面的url
        one_html = self.get_html(url=one_url)
        one_regex = '<li class="cards-li list-photo-li " .*?>    <a href="(.*?)" '
        # 解析正则表达式
        # ['xxx','xxx','xxx'] # 获取到的是url地址，但是需要在前面补全域名
        r_list = self.re_func(one_regex,one_html)
        for href in r_list:
            two_url = 'https://www.che168.com/' + href
            # # 2. 解析二级页面
            self.get_car_info(two_url)

    def get_car_info(self,two_url):
        """提取每一辆汽车的详细信息"""
        two_html = self.get_html(url=two_url)
        two_regex = '<div class="car-box">.*?<h3 class="car-brand-name">(.*?)</h3>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?(?:<div class="goodstartmoney" style="color:#FFF4BC"> (.*?) </div> | <span class="price" id="overlayPrice">(.*?)<b>)'
        # [("标题","价格..."),(),()]
        r_list = self.re_func(two_regex,two_html)
        for r in r_list:
            item = {}
            item['name'] = r[0].strip()
            item["name"] = r[0].strip()
            item['km'] = r[1].strip()
            item['time'] = r[2].strip()
            #档位
            item['gears'] = r[3].split('/')[0].strip()
            # 排量
            item['displacement'] = r[3].split('/')[1].strip()
            item['address'] = r[4].strip()
            print(item)





    def save_html(self):
        """保存二级页面信息"""

        """数据指纹"""
        #在MYSQL中新建一张指纹表 把已经爬取过的URL（二级缓存的）存入
        # 在爬取数据的过程中查询指纹表，如果已经村子爱，不在爬取，如果不存在，爬取

    def run(self):
        """程序入口"""
        for page in range(1,5):
            page_url = self.url.format(page)
            self.parse_html(page_url)

if __name__ == '__main__':
    spider = CarSpider()
    spider.run()


'''
<div class="car-box">.*?<h3 class="car-brand-name">(.*?)</h3>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<span class="price" id="overlayPrice">(.*?)<b>

<div class="car-box">.*?<h3 class="car-brand-name">(.*?)</h3>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<div class="goodstartmoney" style="color:#FFF4BC"> (.*?) </div>
	
	
<div class="car-box">.*?<h3 class="car-brand-name">(.*?)</h3>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?<h4>(.*?)</h4>.*?(?:<div class="goodstartmoney" style="color:#FFF4BC"> (.*?) </div> | <span class="price" id="overlayPrice">(.*?)<b>)
			
'''

